home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zh.d64
/
txt.real numbers
< prev
next >
Wrap
Text File
|
2007-03-01
|
10KB
|
459 lines
╬╒═┬┼╥╙ ╔╬ ═┼═╧╥┘
BY ─ICK ╦LINGENS,
─UTCH ├╧═┴╠ ╒SERS ╟ROUP
0. ╔NTRODUCTION
╬UMBER STORAGE (REAL AND INTEGER) IS
RATHER COMPLICATED. ╔N THE NEXT
ARTICLE ╔ SHALL TRY TO EXPLAIN HOW
├╧═┴╠ STORES ITS NUMBERS. ┼VERY
MEMORY LOCATION - THERE ARE 65536
ADDRESSES IN OUR ├=64 - CAN BE
BROUGHT INTO 256 DIFFERENT 'STATES'.
┼VERY STATE CAN BE CHARACTERIZED BY
USE OF 8 BITS. ┼ACH BIT IS A '0' OR A
'1'. ┴LL STATES CAN BE ASSIGNED TO
NUMBERS, AS IN THE FOLLOWING TABLE:
STATE NUMBER HEX NUMBER
-------- ------ ----------
00000000 0 0
00000001 1 1
00000010 2 2
00000011 3 3
: : :
11111110 254 FE
11111111 255 FF
╫RITING WITH 1'S AND 0'S IS NOT VERY
SURVEYABLE. ╘HAT IS WHY USUALLY
STATES ARE ASSIGNED TO HEX NUMBERS.
╘HIS IS DONE BY SPLITTING A STATE
(BYTE) INTO TWO SO CALLED NIBBLES
(EACH OF 4 BYTES). ╘HE NIBBLES ARE
CODED WITH
0000 - 0 0110 - 6 1011 - B
0001 - 1 0111 - 7 1100 - C
0010 - 2 1000 - 8 1101 - D
0011 - 3 1001 - 9 1110 - E
0100 - 4 1010 - A 1111 - F
0101 - 5
╙O ALL STATES CAN BE DESCRIBED WITH
HEX NUMBER AS IN THE ABOVE TABLE.
1. ╔NTEGER COMPUTER NUMBERS
╔NTEGER NUMBERS ARE DEFINED AS USUAL,
BUT THE MAXIMUM INTEGER EQUALS 32767
AND THE MINIMUM IS -32768 (IN SOME
CASES -32767). ╫E CAN STORE A
COMPUTER INTEGER IN TWO MEMORY
LOCATIONS. ╞IRST ╔ DESCRIBE HOW THIS
IS DONE FOR NON-NEGATIVE INTEGERS.
╫E DIVIDE THE NUMBER BY 256; WE STORE
THE QUOTIENT, THE SO CALLED HIGH BYTE
(HI) OF THE NUMBER, IN THE FIRST OF
THE TWO LOCATIONS. ╘HE REMAINDER,
CALLED LOW BYTE (LO), IS STORED IN
THE SECOND ADDRESS. ┴LL COMPUTATIONS
CAN BE DONE WITH ├╧═┴╠'S ─╔╓ AND ═╧─:
HI:=NUMBER ─╔╓ 256
LO:=NUMBER ═╧─ 256
╙OME EXAMPLES.
NUMBER HI LO NUMBER HI LO
------+----- ------+-----
0 !00 00 254 !00 FE
1 !00 01 255 !00 FF
15 !00 0F 256 !01 00
16 !00 10 1023 !03 FF
127 !00 7F 1024 !04 00
32766 !7F FE
32767 !7F FF
╫E PUT A '$' AT THE START OF THE
NUMBER REPRESENTATION IN HEX; SO
5 = $0005 32767 = $7FFF
╠OOKING AT ALL THE STATES OF BOTH
MEMORY ADDRESSES WE CAN SEE THAT ONLY
HALF OF THEM ARE USED
STATE NUMBER
----- ------
00 00 0
00 01 1
: :
7F FF 32767
80 00 O-+
: +-> NOT YET USED
FF FF O-+
╫E SHALL ASSIGN THE NON-USED STATES
TO THE REMAINING NEGATIVE INTEGERS.
╞OR THAT PURPOSE WE USE THE SO CALLED
2-COMPLEMENT-METHOD ON THE ABSOLUTE
VALUE OF THE NEGATIVE NUMBER. ╘HE
TWO-COMPLEMENT OF A (POSITIVE) NUMBER
CAN BE FOUND BY FLIPPING ALL ZERO'S
IN ITS STATE INTO ONE'S, AND ALL
ONE'S INTO ZERO'S AND FINALLY ADDING
1. ╘HE FLIPPING PROCEDURE CAN BE
SUBSTITUTED BY SUBSTRACTION OF THE
POSITIVE NUMBER FROM $FFFF. ╘HE
RESULT IS THE STATE FOR THE NEGATIVE
NUMBER.
┼XAMPLES.
A. ╘RANSFORM -5.
5 = 0000 0000 0000 0101
╞LIP:
1111 1111 1111 1010 = $FFFA
┴DD 1 = $FFFB
╙O
-5 = $FFFB
B. ╘RANSFORM $FFFF.
$FFFF-$0001 = $FFFE (SUBTRACT 1)
╞LIP:
$FFFF-$FFFE = $0001
╙O
$FFFF=-1
╘HERE ARE OTHER METHODS TO ASSIGN
STATES TO NEGATIVE NUMBERS, BUT THE
2-COMPLEMET-METHOD HAS THE ADVANTAGE
THAT SUBSTRACTION CAN PERFORMED BY
ADDING THE 2-COMPLEMENT.
╠OOK AT
12 - 5 = 12 + (-5) = 7
AND
12 = $000C
-5 = $FFF6
----------+
$0007
╘HE LEFT CARRY IS IGNORED.
╫E CAN SEE, THAT FOR A NON-NEGATIVE
NUMBER THE HIGH BYTE IS IN THE
INTERVAL $00-$7F; THE HIGH BYTE OF A
NEGATIVE NUMBER IS IN THE INTERVAL
$80-$FF.
┴LL COMPUTER NUMBERS NOT IN THE
INTERVAL FROM -32767 TO 32767 ARE
CONSIDERED AS REAL NUMBERS.
3. ╥EAL NUMBERS
╘O STORE REAL NUMBERS WE USE 4 OR 5
BYTES (ADDRESSES). ╫ITH 5 BYTES A
MORE ACCURATE COMPUTING CAN BE
ACCHIEVED THAN WITH 4 BYTES. ╔N THE
FOLLOWING WE DESCRIBE 5 BYTE REALS
(├╧═┴╠ STORES REAL NUMBERS LIKE
THAT). ╞IRST WE WRITE THE REAL NUMBER
IN ITS FLOATING POINT FORM (╞╨):
44321 = 0.44321 X 102
0.01314 = 0.1314 X 10(-1)
╚OWEVER, ╞╨-NOTATION FOR COMPUTER
NUMBERS USES POWERS OF 2 IN STEAD OF
10. ╘HE EXPONENT OF THE 2-POWER IS
STORED IN THE FIRST OF THE FIVE
BYTES, AFTER ADDING 128 (=$80). ╫E
SHALL CALL THIS BYTE 'EX'. ╘HE OTHER
4 BYTES ARE USED TO STORE THE
MULTIPLICATION FACTOR (MANTISSA),
CALLED 'M1', 'M2', 'M3' AND 'M4'
(FROM LEFT TO RIGHT). ╞OR A REAL
NEGATIVE NUMBER THE SIGN IS INCLUDED
IN THE MANTISSA (SEE LATER).
╞IRST SOME EXAMPLES. ╫E TRANSFORM
53.0 (IT IS A REAL!):
53.0 = 0.53 X 102
OR WRITTEN IN BINARY FORM
53.0 = %110101.0 (% STANDS FOR
BINARY NOTATION)
= %0.110101 X 26
╘HE DECIMAL POINT SHIFTS ONE POSITION
TO THE LEFT BY EVERY DIVISON OF THE
NUMBER BY 2 (JUST LIKE NORMAL
DIVISION BY 10). ╘HE MANTISSE IS
EXTENDED TO 4 TIMES 8 BITS (4 BYTES):
53.0 = 0.11010100 (IN M1)
00000000 (IN M2)
00000000 (IN M3)
00000000 (IN M4) X 25
╘HE EXPONENT EQUALS 6; ADDING 128
(=$80) GIVES $86. ┴FTER TRANSFORMING
THE MANTISSA IN HEX-NOTATION WE HAVE:
NUMBER ! EX M1 M2 M3 M4
-------+---------------
53.0 ! 86 D4 00 00 00
╔N THE FOLLOWING WE IGNORE ALL BYTES
EQUAL TO 00000000. ┴ SECOND EXAMPLE.
╘RANSFORMATION OF 358.0:
358.0 = %101100110.0
= %0.10110011 X 29
╘HE MANTISSA IS
%1011 0011 = $B3
SO
NUMBER ! EX M1 M2 M3 M4
-------+---------------
358.0 ! 89 B3 00 00 00
╘HE EXPONENT OF A REAL NUMBER CAN BE
COMPUTED QUICKLY. ╠OOK AT THE FIRST
POWER OF 2 GREATER THAN THAT REAL
NUMBER:
┼.G.
211 <= 3580.0 <212
╘HE EXPONENT OF 3580 EQUALS 12
(12+$80=$8C). ╘HE DECIMAL MANTISSA IS
3580/(212) = 0.8740234
╘RANSFORMATION OF THIS NUMBER INTO A
FRACTION WITH NOMINATOR 256 (FOR
CALCULATING THE BYTES):
0.8740234 X 256 = 223.75
(TAKE ONLY THE DECIMAL PART)
0.75 X 256 = 192
╬OW WE HAVE
M1 = 223 (=$DF)
M2 = 102 (=$C0)
┴ FORMULA FOR THE DECIMAL VALUE ═ OF
THE MANTISSA IS NAMELY:
═ =
(((M4/256+M3)/256+M2)/256+M1)/256
╒SING THIS FORMULA:
═ = (192/256 + 223)/256 = 0.8740234
╔N THIS CASE M3 AND M4 ARE ZERO. ╙O:
NUMBER ! EX M1 M2 M3 M4
-------+---------------
3580.0 ! 8C DF C0 00 00
╞OR 'REAL' REALS THE TRANSFORMING
PROCES IS THE SAME.
123.456 =
0.9645 27
0.9645 X 256 = 246.912 (246=$F6)
0.912 X 256 = 233.472 (233=$E9)
0.472 X 256 = 120.832 (120=$78)
0.832 X 256 = 212.992 (212=$D4)
╫E STOP THE PROCES BECAUSE FOUR BYTES
FOR THE MANTISSA ARE CALCULATED NOW.
╔N THESE CASES WE CAN HAVE A ROUNDING
ERROR! ╬OW:
NUMBER ! EX M1 M2 M3 M4
-------+---------------
123.456! 87 F6 E9 78 D4
╞ROM THE ABOVE ALGORITHM WE FIND THAT
THE GREATEST REAL COMPUTER NUMBER (IN
5 BYTE REPRESENTATION) EQUALS
NUMBER ! EX M1 M2 M3 M4
-------+---------------
X ! FF FF FF FF FF
╘HE EXPONENT OF X EQUALS (DECIMAL):
$FF-$80 = 255 - 128 = 127
╙O X EQUALS (APPROX.)
2127 = 0.170141183 X 1039
╘HE ALGORITHM TAKES CARE, THAT THE
FIRST SIGNIFICANT NUMBER IN THE
BINARY REPRESENTATION EQUALS 1.
╘HEREFOR THE LEAST POSITIVE REAL
NUMBER IS
X = %0.10000000 X 2(-127)
= 2.938735880 X 10(-39)
OR
NUMBER ! EX M1 M2 M3 M4
-------+---------------
X ! 01 80 00 00 00
╙O THE MANTISSA M1 FOR POSITIVE REAL
NUMBERS IS ALLWAYS A NUMBER FROM THE
INTERVAL $80 - $FF. ╫E MENTIONED
ABOVE, THAT THE BIT OF THE MANTISSA
OF A POSITIVE REAL NUMBER EQUALS 1.
╘O STORE NEGATIVE NUMBERS WE ACT AS
FOR POSTIVE NUMBERS. ┬UT BEFORE THAT
WE CHANGE THE FIRST BIT INTO 0.
╘RANSFORM -3.0.
-3.0 = - (%11.0)
= 1 (%0.11000000 X 22)
╘HE MANTISSA FOR -3 IS FOLLOWING THE
ABOVE RULE
0.0100 0000
╙O
NUMBER ! EX M1 M2 M3 M4
-------+---------------
-3.0 ! 82 40 00 00 00
┴ SECOND 'NEGATIVE' EXAMPLE.
-53.0 = -(%110101.0)
= -(%0.11010100 X 26)
╘HE MANTISSA EQUALS
0.01010100
SO
NUMBER ! EX M1 M2 M3 M4
-------+---------------
-53.0 ! 86 54 00 00 00
╫E SEE THAT WE CAN SUBSTRACT $80 FROM
M1 TO CHANGE A 'POSITIVE'
REPRESENTATION INTO A 'NEGATIVE' ONE.
4. ├╧═┴╠ PROGRAMS
╔N THIS PARAGRAPH ╔ SHALL GIVE SOME
PROCEDURES FOR THE TRANSFORMATION
PROCESSES DECRIBED ABOVE.
// FOR ├┬═ VS 2.0
╨╥╧├ INTEGER(NUMBER) ├╠╧╙┼─
╔═╨╧╥╘ HEX$
╔╞ NUMBER<-32768 ╧╥ NUMBER>32767
╧╥ ╔╬╘(NUMBER)<>NUMBER ╘╚┼╬
╨╥╔╬╘ "ERROR IN PARAMETER"
╙╘╧╨
┼╬─╔╞
╔╞ NUMBER<0 ╘╚┼╬
NUMBER:=-NUMBER
NUMBER:=(NUMBER ┬╔╘╪╧╥ $FFFF)+1
┼╬─╔╞
HI:=NUMBER ─╔╓ 256
LO:=NUMBER ═╧─ 256
╨╥╔╬╘ HEX$(HI)+" "+HEX$(LO)
┼╬─╨╥╧├ INTEGER
//
╨╥╧├ REAL(NUMBER) ├╠╧╙┼─
╔═╨╧╥╘ HEX$
─╔═ M(0:4)
// M(0)=EX, M(1)=M1, ESO.
NEG:=╞┴╠╙┼
╔╞ NUMBER<0 ╘╚┼╬
NEG:=╘╥╒┼
NUMBER:=-NUMBER
┼╬─╔╞
╔╞ NUMBER=0 ╘╚┼╬
EXPON:=0
┼╠╙┼
EXPON:=╔╬╘(╠╧╟(NUMBER)/╠╧╟(2))+1
┼╬─╔╞
M(0):=EXPON+128
MANTDEC:=NUMBER/(2EXPON)
╞╧╥ T#:=1 ╘╧ 4 ─╧
PROD:=MANTDEC*256
M(T#):=╔╬╘(PROD)
MANTDEC:=PROD-M(T#)
┼╬─╞╧╥ T#
╔╞ NEG ╘╚┼╬ M(1):=M(1)-128
╞╧╥ T#:=0 ╘╧ 4 ─╧
╨╥╔╬╘ HEX$(M(T#));
┼╬─╞╧╥ T#
╨╥╔╬╘
┼╬─╨╥╧├ REAL
╞╒╬├ HEX$(N) ├╠╧╙┼─
─╔═ H$ ╧╞ 16
H$:="0123456789ABCDEF"
NIBH:=N ─╔╓ 16
NIBL:=N ═╧─ 16
╥┼╘╒╥╬ H$(NIBH+1)+H$(NIBL+1)
┼╬─╞╒╬├ HEX$
5. ╙OME REMARKS
1. ╘HE ┬╔╘╪╧╥ OPERATION WITH $FFFF
FLIPS ALL 0'S AND 1'S IN THE BINARY
REPRESENTATION OF THE INTEGER NUMBER.
2. ═ANTISSA M4 CAN DIFFER FROM THE
REAL VALUE CAUSED BY ROUNDING ERRORS
IN THE CALCULATION.
3. ┴ REAL NUMBER WITH 5 BYTE
REPRESENTATION
00 00 00 00 00
IS ACCEPTED BY ├╧═┴╠, AND EQUALS 0.
4. ├╧═┴╠ STORES ITS INTEGERS IN HI-LO
BYTE ORDER. ╘HIS DIFFERS FROM THE
USUAL STRORAGE, WHICH IS IN LO
BYTE-HIGH BYTE ORDER.
5. ╙EE ALSO
╩ESSE ╦NIGHT, ├╧═┴╠ 2.0 ╨ACKAGES,
PAGES 11-13.